import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { crx } from "@crxjs/vite-plugin";
import zipPack from "vite-plugin-zip-pack";
import obfuscator from "rollup-plugin-obfuscator";
import path from "path";
import fs from "fs";

// 动态读取manifest.json，确保文件变化能被检测到
function getManifest() {
  try {
    const manifestPath = path.resolve(__dirname, 'manifest.json');
    const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
    return JSON.parse(manifestContent);
  } catch (error) {
    console.error('Error reading manifest.json:', error);
    return {};
  }
}

export default defineConfig({
  plugins: [
    vue(), 
    crx({ manifest: getManifest() }),
    // 添加压缩插件配置，增加延迟避免文件冲突
    zipPack({
      inDir: 'dist',         // 要压缩的目录
      outDir: '.',           // 输出zip文件的目录
      outFileName: 'dist.zip', // 输出的zip文件名
      // 添加延迟，确保文件写入完成
      delay: 1000
    })
  ],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
    extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],
  },
  build: {
    outDir: "dist",
    emptyOutDir: true,
    rollupOptions: {
      output: {
        chunkFileNames: "assets/chunk-[hash].js",
      },
      plugins: [
        // 代码混淆配置，根据环境变量决定是否启用
        // 当 DISABLE_OBFUSCATE=true 时，不进行混淆（用于快速构建调试）
        ...(process.env.DISABLE_OBFUSCATE !== 'true' ? [
          obfuscator({
            // 基础混淆选项
            compact: true,
            // 控制流扁平化，增加代码复杂度
            controlFlowFlattening: true,
            controlFlowFlatteningThreshold: 0.75,
            // 注入死代码，增加逆向难度
            deadCodeInjection: true,
            deadCodeInjectionThreshold: 0.4,
            // 禁用调试保护（避免影响正常使用）
            debugProtection: false,
            debugProtectionInterval: 0,
            // 禁用 console 输出（可选，根据需要调整）
            disableConsoleOutput: false,
            // 标识符名称生成器：使用十六进制
            identifierNamesGenerator: 'hexadecimal',
            log: false,
            // 将数字转换为表达式
            numbersToExpressions: true,
            // 不重命名全局变量（避免破坏 Chrome 扩展 API）
            renameGlobals: false,
            // 自我防御：检测代码是否被修改
            selfDefending: true,
            simplify: true,
            // 字符串分割和编码
            splitStrings: true,
            splitStringsChunkLength: 10,
            stringArray: true,
            stringArrayCallsTransform: true,
            stringArrayEncoding: ['base64'],
            stringArrayIndexShift: true,
            stringArrayRotate: true,
            stringArrayShuffle: true,
            stringArrayWrappersCount: 2,
            stringArrayWrappersChainedCalls: true,
            stringArrayWrappersParametersMaxCount: 4,
            stringArrayWrappersType: 'function',
            stringArrayThreshold: 0.75,
            // 转换对象键
            transformObjectKeys: true,
            unicodeEscapeSequence: false,
            // 排除某些文件（可选，根据需要调整）
            exclude: []
          })
        ] : [])
      ]
    },
  },
  // 添加错误处理和日志配置
  logLevel: 'info',
  clearScreen: false,
  // 添加构建优化
  optimizeDeps: {
    exclude: ['chrome']
  }
});
